#include <bits/stdc++.h>

int classwise(unsigned char *ip)
{
    unsigned char first = ip[0];
    if (first < 128)
        return 0; // A类
    else if (first < 192)
        return 1; // B类
    else if (first < 224)
        return 2; // C类
    else if (first < 240)
        return 3; // D类
    else
        return 4; // E类
}

int main()
{
    struct TestCase_CW
    {
        unsigned char ip[4];
        int expected_class;
    } test_cases_cw[] = {
        {{10, 0, 0, 1}, 0},       // A类
        {{128, 0, 0, 1}, 1},      // B类
        {{191, 255, 0, 1}, 1},    // B类边界
        {{192, 168, 1, 1}, 2},    // C类
        {{223, 255, 255, 1}, 2},  // C类边界
        {{224, 0, 0, 1}, 3},      // D类
        {{239, 255, 255, 1}, 3},  // D类边界
        {{240, 0, 0, 1}, 4},      // E类
        {{255, 255, 255, 255}, 4} // E类
    };

    printf("Testing classwise():\n");
    for (int i = 0; i < sizeof(test_cases_cw) / sizeof(test_cases_cw[0]); i++)
    {
        int result = classwise(test_cases_cw[i].ip);
        printf("Test %d: %s (Got %d, Expected %d)\n", i + 1, result == test_cases_cw[i].expected_class ? "PASS" : "FAIL", result, test_cases_cw[i].expected_class);
    }

    return 0;
}
